package _01string;

import java.util.Arrays;
import java.util.Random;

/*
创建一个长度是8的字符串数组
使用8个长度是5的随机字符串初始化这个长度为8的字符串数组
对这个数组进行排序，按照每个字符串的首字母排序(无视大小写)

注1： 不能使用Arrays.sort() 要自己写
注2： 无视大小写，即 Axxxx 和 axxxxx 没有先后顺序
举例:
排序前
[UxoEl, If3js, 9SSwC, czHuA, lZLBF, IhynX, VgjrY, dJAIW]
排序后
[9SSwC, czHuA, dJAIW, If3js, IhynX, lZLBF, UxoEl, VgjrY]
 */
public class Work8 {
    public static void main(String[] args) {
        //创建一个长度是8的字符串数组
        String[] strs = new String[8];

        // 使用8个长度是5的随机字符串初始化这个数组
        for (int i = 0; i < 8; i++) {
            strs[i] = getRandomStr(5);
        }
        System.out.println("排序前");
        System.out.println(Arrays.toString(strs));


        // 对这个数组进行排序，按照每个字符串的首字母排序(无视大小写)
        // 使用冒泡排序
        for (int i = 0; i < strs.length-1; i++) {
            // 里层循环控制比较次数
            for (int j = 0; j < strs.length - 1 - i; j++) {
                // 第一个字符串的第一个字符
                char firstCharacter = strs[j].charAt(0);
                // 第二个字符串的第一个字符
                char secondCharacter = strs[j+1].charAt(0);
                // 转换成小写
                char first = Character.toLowerCase(firstCharacter);
                char second = Character.toLowerCase(secondCharacter);
                if (first > second) {
                    // 做交换
                    String temp = strs[j];
                    strs[j] = strs[j + 1];
                    strs[j + 1] = temp;
                }
            }
        }
        // 排序后
        System.out.println("排序后");
        System.out.println(Arrays.toString(strs));

    }

    /*
     * 随机生成长度为5的字符串
     * 创建日期：2022/2/8 16:22
     * @param length
     * @return void
     * @author 景天
     */
    private static String getRandomStr(int length) {
        String strPool = "";
        for (int i = '0'; i <= '9'; i++) {
            strPool += ((char) i);
        }
        for (int i = 'a'; i <= 'z'; i++) {
            strPool += ((char) i);
        }
        for (int i = 'A'; i <= 'Z'; i++) {
            strPool += ((char) i);
        }
        System.out.println(strPool);
        // 创建长度为length  5 的字符数组
        char[] chars = new char[length];
        Random random = new Random();
        for (int i = 0; i < chars.length; i++) {
            // random中 nextInt(int bound)方法 随机数范围为[0,bound)
            int index = random.nextInt(strPool.length());
            // 从字符串中获取1个随机的字符 并填充到字符数组中
            chars[i] = strPool.charAt(index);
        }

        System.out.println(Arrays.toString(chars));

        // 将填充过数据的字符数组转化为字符串
        String randomStr = new String(chars);

        // 返回生成的随机字符串
        System.out.println(randomStr);
        return randomStr;
    }
}